/*
 * @Author: Vorga
 * @LastEditors: Vorga
 */
#ifndef LINK_TREE_H
#define LINK_TREE_H

#include <stdbool.h>

#include "tree_node.h"

extern char* str;

TreeNode* create_lt();

void destory_lt();

void dlr_lt(TreeNode* node,FUNC show);

void ldr_lt(TreeNode* node,FUNC show);

void _ldr_lt(TreeNode* tree,TreeNode** res);

void lrd_lt(TreeNode* node,FUNC show);
//树的密度
size_t density_lt(TreeNode* node);
//树的高度
size_t height_lt(TreeNode* node);
//判断树书否平衡
bool balance_lt(TreeNode* node);
//通过前序和中序构造二叉树
TreeNode* create_dlr2lt(char* dlr,char* ldr,size_t len);

TreeNode* create_lrd2lt(char* lrd,char* ldr,size_t len);
//层序
void lv_lt(TreeNode* node,FUNC show);

void mirror_lt(TreeNode* tree);
//判断一个结点是不是子结点
bool check_child_lt(TreeNode* child,TreeNode* father);
//判断一个树是不是子树
bool is_child_lt(TreeNode* child,TreeNode* father);

TreeNode* first_ldr_lt(TreeNode* tree);

bool _is_symmetry_lt(TreeNode* left,TreeNode* right);
//判断二叉树是否对称
bool is_symmetry_lt(TreeNode* tree);
//按之字形遍历二叉树
void zhi_lt(TreeNode* tree,bool direction,FUNC show);
#endif // LINK_TREE_H
